#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<sys/wait.h>

void handler(int signal_val)
{
    std::cout << getpid() << "接受到了信号:" << signal_val << std::endl;
}

int main(int argc, char* argv[])
{
    // if(argc != 3)
    // {
    //     std::cout << "Usage:" << argv[0] << "signal_num pid" << std::endl;
    //     return 1;
    // }
    // int signal_num = std::stoi(argv[1]);
    // pid_t pid = std::stoi(argv[2]);
    // int kill_ret = kill(pid, signal_num);
    // if(kill_ret < 0)
    // {
    //     perror("kill");
    //     return 2;
    // }

    // signal(2, handler);
    // while(1)
    // {
    //     //raise(2);
    //     abort();
    //     sleep(1);
    // }

    // alarm(5);
    // while(1)
    // {
    //     std::cout << "hello wrold" << std::endl;
    //     sleep(1);
    // }

    // alarm(3);
    // sleep(1);
    // int alarm_ret = alarm(10);
    // std::cout << alarm_ret << std::endl;

    pid_t pid = fork();
    if(pid == 0)
    {
        // int a = 10;
        // a /= 0; 
        exit(1);
    }
    int status = 0;
    int waitpid_ret = waitpid(pid, &status, 0);
    if(waitpid_ret > 0)
    {
        printf("exit code:%d, exit signal:%d, core dump:%d\n", 
            (status >> 8) & 0xFF, status & 0x7F, (status >> 7) & 0x1);
    }   
}